博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.net微信公众号开发——快速入门
阅读量:5875 次
发布时间:2019-06-19

本文共 3797 字,大约阅读时间需要 12 分钟。

原文:

作者:王先荣

    最近在学习微信公众号开发,将学习的成果做成了一个类库,方便重复使用。

    现在微信公众号多如牛毛,开发微信的高手可以直接无视这个系列的文章了。

    使用该类库的流程及寥寥数行代码得到的结果如下。

  

    本文的源代码主要在:以及

1 引用微信公众号类库

    引用xrwang.weixin.PublicAccount。

 

2 添加公众号信息

    添加提供服务的公众号的信息,包括:原始id、AppId、AppSecret、EncodingAESKey。代码如下:

AccountInfoCollection.SetAccountInfo(new AccountInfo("YourOriginalId", "AppId", "AppSecret", "Token", "EncodingAESKey"));

    如果需要同时给多个公众号提供服务,重复上面这行代码就可以了。

    (注:由于微信服务器的原因,如果用同一页面处理多个公众号,那么Token必须一致;如果针对每个公众号单独建立一个页面来处理,那么没有Token限制。)

    我喜欢将添加公众号信息的工作放到Gobal.asax的Application_Start方法中。

 

3 与微信服务器通信

    我添加了名为“WeixinInterface.ashx”的一般处理页,并在其中与微信服务器进行通信,包括:校验请求、处理请求、回复适当的响应。代码如下:

public void ProcessRequest(HttpContext context)    {        string result = string.Empty;        if (Validate(context))        {            if (context.Request.HttpMethod == WebRequestMethods.Http.Get)                result = HandleGet(context);            else if (context.Request.HttpMethod == WebRequestMethods.Http.Post)                result = HandlePost(context);        }        else            Message.Insert(new Message(MessageType.Exception, "校验消息失败。\r\n地址:" + context.Request.RawUrl));        context.Response.Write(result);    }
与微信服务器通信

3.1 校验请求

    首先,我们需要校验接收到的请求是否来自微信服务器,方法如下:

///     /// 验证消息的有效性    ///     ///     /// 
如果消息有效,返回true;否则返回false。
private bool Validate(HttpContext context) { string token = AccountInfoCollection.First.Token; //由于在校验微信签名时,微信未传入公众号,因此这里用第一个公众号的TOKEN string signature = RequestEx.TryGetQueryString("signature"); string timestamp = RequestEx.TryGetQueryString("timestamp"); string nonce = RequestEx.TryGetQueryString("nonce"); if (string.IsNullOrWhiteSpace(signature) || string.IsNullOrWhiteSpace(timestamp) || string.IsNullOrWhiteSpace(nonce)) return false; return xrwang.weixin.PublicAccount.Utility.CheckSignature(signature, token, timestamp, nonce); }
校验请求

    当然,如果你对世界充满爱,相信没有欺骗;如果你厉行节约,急需提高性能;不校验也是可以的。

3.2 处理请求

    校验完请求之后,我们分两种情况处理请求:

(1)微信服务器的GET请求,用来验证我们的服务器是否正在工作,我们直接返回echostr就可以了;

///     /// 处理微信的GET请求,校验签名    ///     ///     /// 
返回echostr
private string HandleGet(HttpContext context) { return RequestEx.TryGetQueryString("echostr"); }
处理GET请求

(2)微信服务器的POST请求,这是服务器分发给我们的消息,我们需要解析消息。

RequestMessageHelper helper = new RequestMessageHelper(context.Request);

3.3 回复响应

    解析完微信服务器分发给我们的消息之后,我们要做出回应。我这里把收到的消息直接发回去,偷懒~\(≧▽≦)/~啦啦啦

///     /// 处理微信的POST请求    ///     ///     /// 
返回xml响应
private string HandlePost(HttpContext context) { RequestMessageHelper helper = new RequestMessageHelper(context.Request); if (helper.Message != null) { ResponseBaseMessage responseMessage = HandleRequestMessage(helper.Message); return responseMessage.ToXml(helper.EncryptType); } else return string.Empty; } /// /// 处理请求消息,返回响应消息 /// ///
返回响应消息
private ResponseBaseMessage HandleRequestMessage(RequestBaseMessage requestMessage) { ResponseTextMessage response = new ResponseTextMessage(requestMessage.FromUserName, requestMessage.ToUserName, DateTime.Now, string.Format("自动回复,请求内容如下:\r\n{0}", requestMessage)); response.Content += "\r\n博客园"; return response; }
回复响应

    当然了,正常情况下,我们需要兵来将挡水来土掩,根据不同的请求,回复对应的响应。如果需要对请求排队,再一一回复客服消息,可以先直接回复空字符串。回复客服消息的方法请看后面的文章。

 

4 微信公众号类库简介

    xrwang.weixin.PublicAccount是一套简化微信公众号开发的类库,由王先荣开发,并且正在添砖加瓦中。采用MIT开源协议,大家可以随便用,别删掉我的名字就可以啦。

    源代码的地址是:http://git.oschina.net/xrwang2/xrwang.weixin.PublicAccount

    如果发现BUG,请在博客中留言,或者给我发电子邮件:xrwang(a)126.com。

    千万不要用QQ或者阿里旺旺聊天,打扰我玩游戏,我会骂人的  >.<

 

5 体验测试号

    下面分别是我的测试号和公众号,您可以对照文章来体验哦。

测试号

 

测试号权限多,几乎可以测试公众平台的所有功能。

我的公众号

xrwang

 

个人订阅号,功能较少,不过我会特别优化。

 

好了,感谢您看完本文,希望对您有所帮助。本文来自xrwang的博客http://xrwang/cnblogs.com,欢迎在不篡改作者的前提下转载以传播知识。

你可能感兴趣的文章
多核cpu电脑运行多线程程序的问题
查看>>
CSS系列:CSS中盒子之间的关系
查看>>
变量 声明、存储和范围
查看>>
生命是一场旅程,人生是一个过程。走得越远,去的地方越多,越清楚自己要什么生活。...
查看>>
【转】Android异常:that was originally added here
查看>>
Camera中对焦模式总结
查看>>
字符数组、字符串及常量字符串具体解释
查看>>
python代码格式检查工具部署pre_commit
查看>>
WIN32_FIND_DATA 循环获取文件大小BUG
查看>>
GIT用服务器上的版本强制覆盖掉本地的版本(转)
查看>>
jQuery实现鼠标经过图片预览大图效果
查看>>
Linux编辑器的选择使用
查看>>
从零开始做UI-静电的sketch设计教室 视频教程
查看>>
log4cplus使用(二)-自定义日志等级
查看>>
[Android Pro] 小心ReleaseByteArrayElements 中的参数问题
查看>>
asp.net MVC 应用程序的生命周期
查看>>
innobackupex 备份实验
查看>>
什么是目标框架别名(What are the Target Framework Monikers (TFMs))?
查看>>
java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:MaxGCPauseMillis=100/虚拟机调优...
查看>>
【网络爬虫】Httpclient4.X中使用HTTPS的方法采集12306网站
查看>>